package model

import common.Direction
import common.doDirectionAction
import model.abstractClass.AutoMoveView
import model.inter.Blockable
import model.inter.DestoryAble
import model.inter.Sufferable
import org.itheima.kotlin.game.core.Painter
import java.util.*

/**
 * 敌方坦克
 * 自动移动的能力
 * 碰撞的的能力；
 * 销毁的能力；
 * 攻击的能力->自动 产生子弹的能力；
 */
class Enemy(override var x: Int=0
            , override var y: Int=0):
        AutoMoveView(),
        Blockable,
        Sufferable,
        DestoryAble{


    override fun isNeedDestory(): Boolean = totalBlood<=0

    override var totalBlood: Int=3

    override fun autoMove() {
        if(!mIsWillHit){
            move(mCurrentDirection)
        }else{
            //这里要随机修改一个方向的一个操作；
            changeDirection(getRandomDirection())
        }
    }

    /**
     * 这里我们表示的意思
     * 就是随机生产一个与当前方向不同的一个方向
     */
    private fun getRandomDirection(): Direction {

        var nextInt = Random().nextInt(4)

        var direction = when (nextInt) {
            1 -> Direction.UP
            2 -> Direction.DOWN
            3 -> Direction.LEFT
            else -> Direction.RIGHT
        }
        //随机产生一个方向的操作；
        return if(mCurrentDirection == direction) getRandomDirection() else direction
    }


    //默认方向向下
    override var mCurrentDirection: Direction=Direction.DOWN;
    override var speed: Int=4
    override var mIsWillHit: Boolean=false


    override fun draw() {

        var imagePath = mCurrentDirection.doDirectionAction(
                {
                    "img/enemy_1_u.gif"
                },
                {
                    "img/enemy_1_d.gif"
                },
                {
                    "img/enemy_1_l.gif"
                },
                {
                    "img/enemy_1_r.gif"
                }
        )

        Painter.drawImage(imagePath,x,y)
    }



    //这里设置发射的频率；

    val frequency=500;
    var lastTime=0L;

    /**
     * 这里我们要做的一个操作就是产生一颗子弹；
     */
    fun createBullet(): Bullet? {

        var currentTimeMillis = System.currentTimeMillis()


        println("mCurrentTime $currentTimeMillis lastTime $lastTime")
        if(currentTimeMillis-lastTime>frequency){

            lastTime=currentTimeMillis;
            //这里我们随机发射子弹
            return when (Random().nextInt(2)) {
                1 ->

                    /**
                     * 这里我们通过回掉的方式计算得到x,y的值
                     */
                    Bullet(mCurrentDirection,  this) { bulletWidth, bulletHeight -> mCurrentDirection.doDirectionAction(
                            {
                                val bulletX=  x+(width-bulletWidth)/2
                                val bulletY=  y-bulletHeight/2;
                                Pair<Int, Int>(bulletX,bulletY)
                            },{
                                val bulletX=  x+(width-bulletWidth)/2
                                val bulletY=  y+height-bulletHeight/2;
                                Pair<Int, Int>(bulletX,bulletY)
                            },{

                                //左
                                val bulletX=  x-bulletWidth/2
                                val bulletY=  y+(height-bulletHeight)/2;
                                Pair<Int, Int>(bulletX,bulletY)
                            },{

                                //右
                                val bulletX=   x+(width+bulletWidth)/2
                                val bulletY=  y+(height-bulletHeight)/2;
                                Pair<Int, Int>(bulletX,bulletY)

                            })
                    }
                else -> null
            }

        }else{
            return null
        }
    }
}